
// Generated from ./parser/grammar/LooseParser.g4 by ANTLR 4.8

#pragma once


#include "FormalParser.h"


#include "antlr4-runtime.h"


namespace cyclone {


class  LooseParser : public FormalParser {
public:
  enum {
    MultiLineComment = 1, SingleLineComment = 2, RegularExpressionLiteral = 3, 
    OpenBracket = 4, CloseBracket = 5, OpenParen = 6, CloseParen = 7, OpenBrace = 8, 
    TemplateCloseBrace = 9, CloseBrace = 10, SemiColon = 11, Comma = 12, 
    Assign = 13, QuestionMark = 14, Colon = 15, Ellipsis = 16, Dot = 17, 
    PlusPlus = 18, MinusMinus = 19, Plus = 20, Minus = 21, BitNot = 22, 
    Not = 23, Multiply = 24, Divide = 25, Modulus = 26, Exponentiation = 27, 
    Hashtag = 28, RightShiftArithmetic = 29, LeftShiftArithmetic = 30, RightShiftLogical = 31, 
    LessThan = 32, MoreThan = 33, LessThanEquals = 34, GreaterThanEquals = 35, 
    Equals_ = 36, NotEquals = 37, IdentityEquals = 38, IdentityNotEquals = 39, 
    BitAnd = 40, BitXOr = 41, BitOr = 42, And = 43, Or = 44, DoubleQuestionMark = 45, 
    OptionalChainingOperator = 46, MultiplyAssign = 47, DivideAssign = 48, 
    ModulusAssign = 49, ExponentiationAssign = 50, PlusAssign = 51, MinusAssign = 52, 
    LeftShiftArithmeticAssign = 53, RightShiftArithmeticAssign = 54, RightShiftLogicalAssign = 55, 
    BitAndAssign = 56, BitXorAssign = 57, BitOrAssign = 58, ARROW = 59, 
    NullLiteral = 60, BooleanLiteral = 61, DecimalLiteral = 62, HexIntegerLiteral = 63, 
    OctalIntegerLiteral = 64, OctalIntegerLiteral2 = 65, BinaryIntegerLiteral = 66, 
    BigInt = 67, Break = 68, Do = 69, Instanceof = 70, Typeof = 71, Case = 72, 
    Else = 73, New = 74, Var = 75, Catch = 76, Finally = 77, Return = 78, 
    Void = 79, Continue = 80, For = 81, Switch = 82, While = 83, Debugger = 84, 
    Function_ = 85, This = 86, With = 87, Default = 88, If = 89, Throw = 90, 
    Delete = 91, In = 92, Of = 93, Try = 94, As = 95, From = 96, ReadOnly = 97, 
    Async = 98, Class = 99, Enum = 100, Extends = 101, Super = 102, Const = 103, 
    Export = 104, Import = 105, Implements = 106, Let = 107, Private = 108, 
    Public = 109, Interface = 110, Package = 111, Protected = 112, Static = 113, 
    Yield = 114, Await = 115, Any = 116, Number = 117, Boolean = 118, String = 119, 
    Symbol = 120, Undefined = 121, BigIntAnnotation = 122, Int8 = 123, Int16 = 124, 
    Int32 = 125, Int64 = 126, Uint8 = 127, Uint16 = 128, Uint32 = 129, Uint64 = 130, 
    Float = 131, Double = 132, Decimal = 133, Array = 134, Object = 135, 
    Tuple = 136, Struct = 137, Union = 138, Variant = 139, TypeAlias = 140, 
    Get = 141, Set = 142, Constructor = 143, Namespace = 144, Module = 145, 
    Declare = 146, Abstract = 147, Is = 148, At = 149, SingQuote = 150, 
    DoubleQuote = 151, QuestionMarkFollowedByDecimalDirectly = 152, Identifier = 153, 
    StringLiteral = 154, BackTick = 155, WhiteSpaces = 156, LineTerminator = 157, 
    HtmlComment = 158, CDataComment = 159, UnexpectedCharacter = 160, TemplateStringStartExpression = 161, 
    TemplateStringAtom = 162
  };

  enum {
    RuleInput = 0, RuleVardecl = 1, RuleOutput = 2, RulePattern = 3, RuleAssignmentPattern = 4, 
    RuleInitializer = 5, RuleParameterList = 6, RuleParameter = 7, RuleAdvancedParameterList = 8, 
    RuleRequiredParameterList = 9, RuleAdvancedParameter = 10, RuleOptionalParameter = 11, 
    RuleRequiredParameter = 12, RuleAccessibilityModifier = 13, RuleInterfaceExtendsClause = 14, 
    RuleClassOrInterfaceTypeList = 15, RuleEnumDeclaration = 16, RuleEnumBody = 17, 
    RuleEnumMemberList = 18, RuleEnumMember = 19, RuleImportAliasDeclaration = 20, 
    RuleProgram = 21, RuleSourceElement = 22, RuleStatement = 23, RuleBraceBlock = 24, 
    RuleDeclaration = 25, RuleFunctionDeclaration = 26, RuleBaseFunction = 27, 
    RuleBaseClass = 28, RuleStatementList = 29, RuleFromBlock = 30, RuleMultipleImportStatement = 31, 
    RuleVariableDeclaration = 32, RuleVariableDeclaratorList = 33, RuleVariableDeclarator = 34, 
    RuleForInitStatement = 35, RuleBaseForXStatement = 36, RuleVarModifier = 37, 
    RuleSwitchCaseList = 38, RuleCaseClauses = 39, RuleCaseClause = 40, 
    RuleDefaultClause = 41, RuleCatchProduction = 42, RuleFinallyProduction = 43, 
    RuleClassBody = 44, RuleClassExtendsClause = 45, RuleImplementsClause = 46, 
    RuleClassElement = 47, RuleMethodDefinition = 48, RulePropertyDefinition = 49, 
    RuleGeneratorMethod = 50, RuleGeneratorFunctionDeclaration = 51, RuleGeneratorBlock = 52, 
    RuleGeneratorDefinition = 53, RuleIteratorBlock = 54, RuleIteratorDefinition = 55, 
    RuleFunctionBody = 56, RuleSourceArrayList = 57, RuleSpreadElement = 58, 
    RuleArrayElement = 59, RuleArrayElementArrayList = 60, RuleArrayPatternElementArrayList = 61, 
    RuleObjectElement = 62, RuleObjectElementArrayList = 63, RulePropertyName = 64, 
    RulePropertyKey = 65, RuleProperty = 66, RuleAssignmentProperty = 67, 
    RuleObjectPatternElement = 68, RuleObjectPatternElementArrayList = 69, 
    RuleGetAccessor = 70, RuleSetAccessor = 71, RuleArgumentArrayList = 72, 
    RuleArgument = 73, RuleExpressionSequence = 74, RuleUpdateOperator = 75, 
    RuleUnaryOperator = 76, RuleExponentiationOperator = 77, RuleMultiplicativeOperator = 78, 
    RuleAdditiveOperator = 79, RuleBitShiftOperator = 80, RuleRelationalOperator = 81, 
    RuleInstanceofOperator = 82, RuleInOperator = 83, RuleEqualityOperator = 84, 
    RuleBitAndOperator = 85, RuleBitOrOperator = 86, RuleBitXorOperator = 87, 
    RuleExpression = 88, RuleIdentifier = 89, RuleMetaPropertyIdentifier = 90, 
    RulePrivateIdentifier = 91, RuleMemberExpressionProperty = 92, RuleArrowFunctionParameters = 93, 
    RuleArrowFunctionBody = 94, RuleAssignmentOperator = 95, RuleNumericLiteral = 96, 
    RuleLiteral = 97, RuleTemplateLiteral = 98, RuleTemplateStringAtom = 99, 
    RuleKeyword = 100, RuleGetter = 101, RuleSetter = 102, RuleEos = 103, 
    RuleAssignable = 104, RuleTypeAnnotation = 105, RuleQualifiedName = 106, 
    RuleTypeName = 107, RuleJsPrimitiveType = 108, RuleExtendedPrimitiveType = 109, 
    RuleTypeList = 110, RuleAnonymousObjectPropertyListSeparator = 111, 
    RuleAnonymousObjectPropertyList = 112, RuleObjectPropertyPair = 113, 
    RuleGenericKind = 114, RuleCommaGeneric = 115, RuleAngleGeneric = 116, 
    RuleObjectOrArrayGenericType = 117, RuleType_ = 118, RuleTypeAnnot = 119, 
    RuleTypePredicate = 120, RuleFunctionReturnType = 121
  };

  LooseParser(antlr4::TokenStream *input);
  ~LooseParser();

  virtual std::string getGrammarFileName() const override;
  virtual const antlr4::atn::ATN& getATN() const override { return _atn; };
  virtual const std::vector<std::string>& getTokenNames() const override { return _tokenNames; }; // deprecated: use vocabulary instead.
  virtual const std::vector<std::string>& getRuleNames() const override;
  virtual antlr4::dfa::Vocabulary& getVocabulary() const override;




  virtual InputContext* input();

  virtual VardeclContext* vardecl();

  virtual OutputContext* output();

  virtual PatternContext* pattern();

  virtual AssignmentPatternContext* assignmentPattern();

  virtual InitializerContext* initializer();

  virtual ParameterListContext* parameterList();

  virtual ParameterContext* parameter();

  virtual AdvancedParameterListContext* advancedParameterList();

  virtual RequiredParameterListContext* requiredParameterList();

  virtual AdvancedParameterContext* advancedParameter();

  virtual OptionalParameterContext* optionalParameter();

  virtual RequiredParameterContext* requiredParameter();

  virtual AccessibilityModifierContext* accessibilityModifier();

  virtual InterfaceExtendsClauseContext* interfaceExtendsClause();

  virtual ClassOrInterfaceTypeListContext* classOrInterfaceTypeList();

  virtual EnumDeclarationContext* enumDeclaration();

  virtual EnumBodyContext* enumBody();

  virtual EnumMemberListContext* enumMemberList();

  virtual EnumMemberContext* enumMember();

  virtual ImportAliasDeclarationContext* importAliasDeclaration();

  virtual ProgramContext* program();

  virtual SourceElementContext* sourceElement();

  virtual StatementContext* statement();

  virtual BraceBlockContext* braceBlock();

  virtual DeclarationContext* declaration();

  virtual FunctionDeclarationContext* functionDeclaration();

  virtual BaseFunctionContext* baseFunction();

  virtual BaseClassContext* baseClass();

  virtual StatementListContext* statementList();

  virtual FromBlockContext* fromBlock();

  virtual MultipleImportStatementContext* multipleImportStatement();

  virtual VariableDeclarationContext* variableDeclaration();

  virtual VariableDeclaratorListContext* variableDeclaratorList();

  virtual VariableDeclaratorContext* variableDeclarator();

  virtual ForInitStatementContext* forInitStatement();

  virtual BaseForXStatementContext* baseForXStatement();

  virtual VarModifierContext* varModifier();

  virtual SwitchCaseListContext* switchCaseList();

  virtual CaseClausesContext* caseClauses();

  virtual CaseClauseContext* caseClause();

  virtual DefaultClauseContext* defaultClause();

  virtual CatchProductionContext* catchProduction();

  virtual FinallyProductionContext* finallyProduction();

  virtual ClassBodyContext* classBody();

  virtual ClassExtendsClauseContext* classExtendsClause();

  virtual ImplementsClauseContext* implementsClause();

  virtual ClassElementContext* classElement();

  virtual MethodDefinitionContext* methodDefinition();

  virtual PropertyDefinitionContext* propertyDefinition();

  virtual GeneratorMethodContext* generatorMethod();

  virtual GeneratorFunctionDeclarationContext* generatorFunctionDeclaration();

  virtual GeneratorBlockContext* generatorBlock();

  virtual GeneratorDefinitionContext* generatorDefinition();

  virtual IteratorBlockContext* iteratorBlock();

  virtual IteratorDefinitionContext* iteratorDefinition();

  virtual FunctionBodyContext* functionBody();

  virtual SourceArrayListContext* sourceArrayList();

  virtual SpreadElementContext* spreadElement();

  virtual ArrayElementContext* arrayElement();

  virtual ArrayElementArrayListContext* arrayElementArrayList();

  virtual ArrayPatternElementArrayListContext* arrayPatternElementArrayList();

  virtual ObjectElementContext* objectElement();

  virtual ObjectElementArrayListContext* objectElementArrayList();

  virtual PropertyNameContext* propertyName();

  virtual PropertyKeyContext* propertyKey();

  virtual PropertyContext* property();

  virtual AssignmentPropertyContext* assignmentProperty();

  virtual ObjectPatternElementContext* objectPatternElement();

  virtual ObjectPatternElementArrayListContext* objectPatternElementArrayList();

  virtual GetAccessorContext* getAccessor();

  virtual SetAccessorContext* setAccessor();

  virtual ArgumentArrayListContext* argumentArrayList();

  virtual ArgumentContext* argument();

  virtual ExpressionSequenceContext* expressionSequence();

  virtual UpdateOperatorContext* updateOperator();

  virtual UnaryOperatorContext* unaryOperator();

  virtual ExponentiationOperatorContext* exponentiationOperator();

  virtual MultiplicativeOperatorContext* multiplicativeOperator();

  virtual AdditiveOperatorContext* additiveOperator();

  virtual BitShiftOperatorContext* bitShiftOperator();

  virtual RelationalOperatorContext* relationalOperator();

  virtual InstanceofOperatorContext* instanceofOperator();

  virtual InOperatorContext* inOperator();

  virtual EqualityOperatorContext* equalityOperator();

  virtual BitAndOperatorContext* bitAndOperator();

  virtual BitOrOperatorContext* bitOrOperator();

  virtual BitXorOperatorContext* bitXorOperator();

  virtual ExpressionContext* expression();
  virtual ExpressionContext* expression(int precedence);

  virtual IdentifierContext* identifier();

  virtual MetaPropertyIdentifierContext* metaPropertyIdentifier();

  virtual PrivateIdentifierContext* privateIdentifier();

  virtual MemberExpressionPropertyContext* memberExpressionProperty();

  virtual ArrowFunctionParametersContext* arrowFunctionParameters();

  virtual ArrowFunctionBodyContext* arrowFunctionBody();

  virtual AssignmentOperatorContext* assignmentOperator();

  virtual NumericLiteralContext* numericLiteral();

  virtual LiteralContext* literal();

  virtual TemplateLiteralContext* templateLiteral();

  virtual TemplateStringAtomContext* templateStringAtom();

  virtual KeywordContext* keyword();

  virtual GetterContext* getter();

  virtual SetterContext* setter();

  virtual EosContext* eos();

  virtual AssignableContext* assignable();

  virtual TypeAnnotationContext* typeAnnotation();

  virtual QualifiedNameContext* qualifiedName();

  virtual TypeNameContext* typeName();

  virtual JsPrimitiveTypeContext* jsPrimitiveType();

  virtual ExtendedPrimitiveTypeContext* extendedPrimitiveType();

  virtual TypeListContext* typeList();

  virtual AnonymousObjectPropertyListSeparatorContext* anonymousObjectPropertyListSeparator();

  virtual AnonymousObjectPropertyListContext* anonymousObjectPropertyList();

  virtual ObjectPropertyPairContext* objectPropertyPair();

  virtual GenericKindContext* genericKind();

  virtual CommaGenericContext* commaGeneric();

  virtual AngleGenericContext* angleGeneric();

  virtual ObjectOrArrayGenericTypeContext* objectOrArrayGenericType();

  virtual Type_Context* type_();
  virtual Type_Context* type_(int precedence);

  virtual TypeAnnotContext* typeAnnot();

  virtual TypePredicateContext* typePredicate();

  virtual FunctionReturnTypeContext* functionReturnType();


  virtual bool sempred(antlr4::RuleContext *_localctx, size_t ruleIndex, size_t predicateIndex) override;

private:
  static std::vector<antlr4::dfa::DFA> _decisionToDFA;
  static antlr4::atn::PredictionContextCache _sharedContextCache;
  static std::vector<std::string> _ruleNames;
  static std::vector<std::string> _tokenNames;

  static std::vector<std::string> _literalNames;
  static std::vector<std::string> _symbolicNames;
  static antlr4::dfa::Vocabulary _vocabulary;
  static antlr4::atn::ATN _atn;
  static std::vector<uint16_t> _serializedATN;


  struct Initializer {
    Initializer();
  };
  static Initializer _init;
};

}  // namespace cyclone
